package com.nlx.notes.module.controller;

import com.nlx.notes.module.bean.dto.login.GuestLoginDTO;
import com.nlx.notes.module.bean.dto.login.UserLoginDTO;
import com.nlx.notes.module.bean.vo.login.UserLoginVo;
import com.nlx.notes.module.core.util.JSONUtils;
import com.nlx.notes.module.service.login.LoginService;
import com.nlx.notes.support.context.UserHolder;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping(value = "/login")
@RequiredArgsConstructor(onConstructor_ =@Autowired)
public class UserLoginController {


    final LoginService loginService;

    /**
     * 用户登录
     * @param userLoginDTO 参数
     * @return UserLoginVo
     */
    @PostMapping(value = "/v1/user")
    public UserLoginVo login(@RequestBody UserLoginDTO userLoginDTO) {
        log.info("用户登录，入参：{}", JSONUtils.toString(userLoginDTO));
        return loginService.login(userLoginDTO);
    }


    @PostMapping(value = "/v1/guest")
    public UserLoginVo guestLogin(@RequestBody GuestLoginDTO guestLoginDTO) {
        log.info("游客登录,游客id：{}",JSONUtils.toString(guestLoginDTO));
        return loginService.guestLogin(guestLoginDTO);
    }




    /**
     * 退出登录
     * @return boolean
     */
    @PostMapping(value = "/v1/loginOut")
    public boolean loginOut() {
        Long userId = UserHolder.getUserContext().getId();
        log.info("current user {} loginOut", userId);
        return loginService.loginOut(userId,UserHolder.getUserContext().getToken());
    }


}
